【小ネタ】MackerelでEC2のファイル監視をしてみた
はじめに
こんにちは。ネクストモード株式会社でセールス担当をしているmachiです。
最近「EC2上にある重要なファイルが消えたら困るので、ちゃんと存在してるか監視したい」という要望をいただきました。
そこで、今回は特定のファイルが消えたらアラートが出る仕組みをMackerelで実現してみました(そもそもファイルを消せないようにすべきでは…という正論は一旦置いておきます)
どうやって監視するの?
Mackerelでは、Mackerel に送信されたメトリック値に対する閾値監視をおこなうメトリック監視だけではなく、「チェック監視」も行うことができます。
チェック監視とは、エージェントがチェックプラグインを定期的に実行してOK / NGの判定をおこない、その判定結果を Mackerel に投稿するというものです。
プラグインはMackerelが公式で用意しているものがあるのですが、それじゃ足りない!という場合は自分で作成したものも利用できちゃいます。
今回のテーマである「EC2の中に特定のファイルがあるかどうか」をチェックするプラグインは公式には無かったので、ちゃちゃっと作りました(エンジニアさんが)。
※チェック監視項目の追加は、Mackerel公式のヘルプサイトを参照しました。
前提
- EC2にSSH接続済
- Mackerelエージェント、mackerel-check-pluginsをインストール済 ※
※インストール方法は以前書いたブログで紹介してるのでご参照ください。
全体の流れ
- 特定ファイルをEC2上に作成する
- 特定ファイルが存在するかどうか確認するスクリプトを用意
- 用意したスクリプトをMackerelエージェントに設定
- 特定ファイルをEC2上から削除しアラートが出るか確認
- 特定ファイルを復活させアラートが消えるか確認
特定ファイルをEC2上に作成する
テスト用のファイルを作成します。
今回は「a.txt」という名前のファイルを「/home/ec2-user」に作ります。
sudo touch /home/ec2-user/a.txt
特定ファイルが存在するかどうかを確認するスクリプトを用意
「/home/ec2-user」に「test.sh」というスクリプトを作成します。
sudo vi /home/ec2-user/test.sh
スクリプトの内容は下記とします。
「/home/ec2-user」に「a.txt」という名前のファイルが存在していない場合に「Critical」としてアラートを通知する、という内容です。
#/bin/bash if [ -e /home/ec2-user/a.txt ]; then exit 0 else exit 2 fi
このスクリプトに実行権限を付与してあげます。
sudo chmod 755 /home/ec2-user/test.sh
用意したスクリプトをMackerelエージェントに設定
mackerel-agent.confを編集するために下記コマンドを叩きましょう。
sudo vi /etc/mackerel-agent/mackerel-agent.conf
下記を記載することで、作成したスクリプトが定期実行されるようになります。
[plugin.checks.filecheck] command = "/home/ec2-user/test.sh"
設定を反映させるためにMackerelエージェントを再起動します。
sudo systemctl restart mackerel-agent
Mackerelポータルで該当のホストを見ると、監視が開始されています。
特定ファイルをEC2上から削除しアラートが出るか確認
「a.txt」を「/home/ec2-user」から削除します。
sudo rm /home/ec2-user/a.txt
Mackerelポータルを確認するとアラートが上がっています!
特定ファイルを復活させアラートが消えるか確認
再度「a.txt」を「/home/ec2-user」に作ってみます。
sudo touch /home/ec2-user/a.txt
アラートが消えました!
アラートの履歴はこちら。
さいごに
今回はファイルの有無を監視しましたが、例えば「ファイル数を監視することでサーバー内のファイルの急増に気づけるようにする…」等も、簡単なスクリプトを書くことで実現できます。興味がある方は是非お試しください。
また、弊社ではMackerelをベースとした監視サービス「運用アシスタント」をご提供しています。障害対応や日々の運用代行の実施も可能ですので、AWS運用にご不安がありましたらお気軽にお問い合わせ頂けますと幸いです。